#define _CRT_SECURE_NO_WARNINGS 1
#include "Seqlist.h"
#include "Contact.h"

//初始化通讯录
void InitContact(contact* con)
{
	SLInit(con);
}

//销毁通讯录数据
void DestroyContact(contact* con)
{
	SLDestroy(con);
}

//添加通讯录数据
void AddContact(contact* con)
{
	assert(con);

	//记录要添加的数据
	perinof pf = {0};
	printf("请输入要添加的姓名：\n");
	scanf("%s", pf.name);

	printf("请输入要添加的性别：\n");
	scanf("%s", pf.gender);

	printf("请输入要添加的年龄：\n");
	scanf("%d", &pf.age);

	printf("请输入要添加的电话号码:\n");
	scanf("%s", pf.tel);

	printf("请输入要添加的地址:\n");
	scanf("%s", pf.address);

	SLPushBack(con,pf);
}

int FindByName(contact* ps,char name[NMAE_MAX])
{
	assert(ps);
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		//找到了
		if (0 == strcmp(ps->arr[i].name,name))
		{
			return i;
		}
	}
	//找不到
	return -1;
}

//删除通讯录数据
void DelContact(contact* con)
{
	assert(con);
	//选择要删除的联系人
	char name[NMAE_MAX];
	printf("请输入要删除的联系人姓名\n");
	scanf("%s", name);

	int find = FindByName(con, name);
	if (find < 0)
	{
		printf("找不到该数据\n");
		return;
	}
	SLErase(con,find);
	printf("删除成功！\n");
}


//展示通讯录数据
void ShowContact(contact* con)
{
	assert(con);

	printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");

	int i = 0;
	for (i = 0; i < con->size; i++)
	{
		printf("%s %s %d %s %s\n",
			con->arr[i].name,
			con->arr[i].gender,
			con->arr[i].age,
			con->arr[i].tel,
			con->arr[i].address);
	}
}


//查找通讯录数据
void FindContact(contact* con)
{
	assert(con);

	char name[NMAE_MAX];
	printf("请输入要查找的联系人：\n");
	scanf("%s", name);

	int find = FindByName(con,name);
	if (find < 0)
	{
		printf("该联系人不存在\n");
		return;
	}

	printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");

	int i = 0;
	for (i = 0; i < con->size; i++)
	{
		printf("%s %s %d %s %s\n",
			con->arr[i].name,
			con->arr[i].gender,
			con->arr[i].age,
			con->arr[i].tel,
			con->arr[i].address);
	}
}



//修改通讯录数据
void ModifyContact(contact* con)
{
	char name[NMAE_MAX];
	printf("请输入要修改的联系人姓名\n");
	scanf("%s", name);

	int find = FindByName(con, name);
	if (find < 0)
	{
		printf("找不到该联系人\n");
		return;
	}

	//直接修改
	printf("新的联系人姓名为：\n");
	scanf("%s", con->arr[find].name);

	printf("新的联系人性别为：\n");
	scanf("%s", con->arr[find].gender);

	printf("新的联系人年龄为：\n");
	scanf("%d", &con->arr[find].age);

	printf("新的联系人电话为：\n");
	scanf("%s", con->arr[find].tel);

	printf("新的联系人地址为：\n");
	scanf("%s", con->arr[find].address);
}


//保留通讯录联系人到文件中，以便下次取出
void PreserveContact(contact* con)
{
	assert(con);

	//打开文件
	FILE* pf = fopen("contact.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	//将当前通讯录中的数据写入通讯录文件中
	int i = 0;
	for (i = 0; i < con->size; i++)
	{
		fprintf(pf, "%s %s %d %s %s\n",
			con->arr[i].name,
			con->arr[i].gender,
			con->arr[i].age,
			con->arr[i].tel,
			con->arr[i].address);
	}
	printf("数据写入成功！\n");
	//关闭文件
	fclose(pf);
	pf = NULL;
}